上一章介绍了如何获取USB设备信息列表。如果你详细阅读过上一篇的代码后,会发现,如果我们有同时使用两种同类型的设备,很难过滤出来,这时候我们就需要用到本章介绍的方法——热插拔获取对应USB设备信息
以下内容来自网络,未找到出处,等确定出处,改成转载。 逐行注释的版本丢了,不明白的地方可以google一下
原理是通过Qt窗口自带的消息机制过滤设备注册消息进行处理
.h
#include
#include
.cpp
//注册设备
void Dialog::registerDevice()
{
const GUID GUID_DEVINTERFACE_LIST[] =
{
{ 0xA5DCBF10, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } }, //USB设备的GUID
{ 0x53f56307, 0xb6bf, 0x11d0, { 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b } }
};
HDEVNOTIFY hDevNotify;
DEV_BROADCAST_DEVICEINTERFACE NotifacationFiler;
ZeroMemory(&NotifacationFiler,sizeof(DEV_BROADCAST_DEVICEINTERFACE));
NotifacationFiler.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotifacationFiler.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
for (int i = 0; i winId(), &NotifacationFiler, DEVICE_NOTIFY_WINDOW_HANDLE);
if (!hDevNotify)
{
qDebug() lParam;
switch (msg->wParam) {
case DBT_DEVICEARRIVAL:
{
if (DBT_DEVTYP_VOLUME == lpdb->dbch_devicetype)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
if (0 == lpdbv->dbcv_flags) { //优盘
QString USBDisk = QString(this->firstDriveFromMask(lpdbv ->dbcv_unitmask));
ui->labelShowMsg->setText(QString(QStringLiteral("已检测到USB设备插入--盘符:")).arg(USBDisk));
} else if (DBTF_MEDIA == lpdbv->dbcv_flags) {
qDebug() dbcc_name);
qDebug() dbcv_flags) {
ui->labelShowMsg->setText(QString(QStringLiteral("USB设备已拔出!")));
QTimer::singleShot(1000, ui->labelShowMsg, SLOT(clear()));
}
if (DBTF_MEDIA == lpdbv->dbcv_flags) {
ui->labelShowMsg->setText("CD_Removed.");
}
}
}
break;
}
}
return false;
}
void Dialog::display()
{
if (m_usbInfoList.count() >= 6) {
ui->lineEditVid->setText(m_usbInfoList.at(0));
ui->lineEditPid->setText(m_usbInfoList.at(1));
ui->lineEditSerialNum->setText(m_usbInfoList.at(2));
ui->lineEditProduct->setText(m_usbInfoList.at(3));
ui->lineEditVendorID->setText(m_usbInfoList.at(4));
ui->lineEditProductVersion->setText(m_usbInfoList.at(5));
} else {
ui->lineEditVid->setText(m_usbInfoList.at(0));
ui->lineEditPid->setText(m_usbInfoList.at(1));
ui->lineEditSerialNum->setText(m_usbInfoList.at(2));
}
}
char Dialog::firstDriveFromMask(ULONG unitmask)
{
char i;
for (i = 0; i > 1;
}
return (i + 'A');
}
设备拔下插入输出内容
"\\\\?\\USB#VID_258A&PID_1007#5&21cd2d89&0&3#{a5dcbf10-6530-11d2-901f-00c04fb951ed}"
![![在这里插入图片描述](https://img-blog.csdnimg.cn/51164af8531e48b382b9e41a0a7e56f9.png](https://img-blog.csdnimg.cn/034b067ebb8548afa6d52c5ceb55a79f.png)
|